const toString = Object.prototype.toString

// 判断值是否是某个类型
export function is(val, type) {
  return toString.call(val) === `[object ${type}]`
}

// 是否是数值
export function isNumber(val) {
  return is(val, 'Number')
}

// 是否是字符串
export function isString(val) {
  return is(val, 'String')
}

// 是否是布尔值
export function isBoolean(val) {
  return is(val, 'Boolean')
}

// 是否是数组
export function isArray(val) {
  return is(val, 'Array')
}

// 是否是函数
export function isFunction(val) {
  return is(val, 'Function')
}

// 是否是对象
export function isObject(val) {
  return is(val, 'Object')
}

// 是否是Promise对象
export function isPromise(val) {
  return is(val, 'Promise')
}

// 是否是日期对象
export function isDate(val) {
  return is(val, 'Date')
}

// 是否是AsyncFunction
export function isAsyncFunction(val) {
  return is(val, 'AsyncFunction')
}

// 是否已定义
export function isDef(val) {
  return typeof val !== 'undefined'
}

// 是否是Storage对象
export function isStorage(val) {
  return is(val, 'Storage')
}
